Precise iOS Toolkit  2.13.0
 All Classes Files Functions Variables Typedefs Enumerations Enumerator Properties Macros Groups
winscard.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2011 - 2013, Precise Biometrics AB
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions
7  * are met:
8  * 1. Redistributions of source code must retain the above copyright
9  * notice, this list of conditions and the following disclaimer.
10  * 2. Redistributions in binary form must reproduce the above copyright
11  * notice, this list of conditions and the following disclaimer in the
12  * documentation and/or other materials provided with the distribution.
13  * 3. Neither the name of the Precise Biometrics AB nor the names of its
14  * contributors may be used to endorse or promote products derived from
15  * this software without specific prior written permission.
16  *
17  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
18  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
19  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
20  * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
21  * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
22  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
23  * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
24  * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
25  * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
26  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
27  * THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
28  * DAMAGE.
29  *
30  *
31  * $Date: 2015-02-03 13:22:25 +0100 (Tue, 03 Feb 2015) $ $Rev: 26843 $
32  *
33  */
34 
35 #ifndef _WINSCARD_H_
36 #define _WINSCARD_H_
37 
38 #include <errno.h>
39 #include "wintypes.h"
40 
41 #pragma mark SCARD_SCOPE_
42 
46 #define SCARD_SCOPE_USER 0
47 
50 #define SCARD_SCOPE_TERMINAL 1
51 
54 #define SCARD_SCOPE_SYSTEM 2
55 
57 #pragma mark SCARD_SHARE_
58 
62 #define SCARD_SHARE_EXCLUSIVE 1
63 
64 #define SCARD_SHARE_SHARED 2
65 
67 #define SCARD_SHARE_DIRECT 3
68 
73 #define SCARD_LEAVE_CARD 0
74 
75 #define SCARD_RESET_CARD 1
76 
77 #define SCARD_UNPOWER_CARD 2
78 
79 #define SCARD_EJECT_CARD 3
80 
83 #define SCARD_AUTOALLOCATE (DWORD)(-1)
84 
89 #define SCARD_UNKNOWN 0
90 
91 #define SCARD_ABSENT 1
92 
94 #define SCARD_PRESENT 2
95 
97 #define SCARD_SWALLOWED 3
98 
100 #define SCARD_POWERED 4
101 
103 #define SCARD_NEGOTIABLE 5
104 
106 #define SCARD_SPECIFIC 6
107 
114 #define SCARD_STATE_UNAWARE 0x00000000
115 
117 #define SCARD_STATE_IGNORE 0x00000001
118 
122 #define SCARD_STATE_CHANGED 0x00000002
123 
126 #define SCARD_STATE_UNKNOWN 0x00000004
127 
129 #define SCARD_STATE_UNAVAILABLE 0x00000008
130 
132 #define SCARD_STATE_EMPTY 0x00000010
133 
134 #define SCARD_STATE_PRESENT 0x00000020
135 
138 #define SCARD_STATE_ATRMATCH 0x00000040
139 
142 #define SCARD_STATE_EXCLUSIVE 0x00000080
143 
146 #define SCARD_STATE_INUSE 0x00000100
147 
149 #define SCARD_STATE_MUTE 0x00000200
150 
151 #define SCARD_STATE_UNPOWERED 0x00000400
152 
157 #define SCARD_S_SUCCESS ((DWORD)0x00000000L)
158 
159 #define SCARD_F_INTERNAL_ERROR ((DWORD)0x80100001L)
160 
161 #define SCARD_E_CANCELLED ((DWORD)0x80100002L)
162 
163 #define SCARD_E_INVALID_HANDLE ((DWORD)0x80100003L)
164 
165 #define SCARD_E_INVALID_PARAMETER ((DWORD)0x80100004L)
166 
167 #define SCARD_E_INVALID_TARGET ((DWORD)0x80100005L)
168 
169 #define SCARD_E_NO_MEMORY ((DWORD)0x80100006L)
170 
171 #define SCARD_F_WAITED_TOO_LONG ((DWORD)0x80100007L)
172 
174 #define SCARD_E_INSUFFICIENT_BUFFER ((DWORD)0x80100008L)
175 
176 #define SCARD_E_UNKNOWN_READER ((DWORD)0x80100009L)
177 
178 #define SCARD_E_TIMEOUT ((DWORD)0x8010000AL)
179 
181 #define SCARD_E_SHARING_VIOLATION ((DWORD)0x8010000BL)
182 
184 #define SCARD_E_NO_SMARTCARD ((DWORD)0x8010000CL)
185 
186 #define SCARD_E_UNKNOWN_CARD ((DWORD)0x8010000DL)
187 
188 #define SCARD_E_CANT_DISPOSE ((DWORD)0x8010000EL)
189 
191 #define SCARD_E_PROTO_MISMATCH ((DWORD)0x8010000FL)
192 
193 #define SCARD_E_NOT_READY ((DWORD)0x80100010L)
194 
196 #define SCARD_E_INVALID_VALUE ((DWORD)0x80100011L)
197 
199 #define SCARD_E_SYSTEM_CANCELLED ((DWORD)0x80100012L)
200 
202 #define SCARD_F_COMM_ERROR ((DWORD)0x80100013L)
203 
204 #define SCARD_F_UNKNOWN_ERROR ((DWORD)0x80100014L)
205 
206 #define SCARD_E_INVALID_ATR ((DWORD)0x80100015L)
207 
208 #define SCARD_E_NOT_TRANSACTED ((DWORD)0x80100016L)
209 
210 #define SCARD_E_READER_UNAVAILABLE ((DWORD)0x80100017L)
211 
212 #define SCARD_P_SHUTDOWN ((DWORD)0x80100018L)
213 
214 #define SCARD_E_PCI_TOO_SMALL ((DWORD)0x80100019L)
215 
216 #define SCARD_E_READER_UNSUPPORTED ((DWORD)0x8010001AL)
217 
218 #define SCARD_E_DUPLICATE_READER ((DWORD)0x8010001BL)
219 
220 #define SCARD_E_CARD_UNSUPPORTED ((DWORD)0x8010001CL)
221 
222 #define SCARD_E_NO_SERVICE ((DWORD)0x8010001DL)
223 
224 #define SCARD_E_SERVICE_STOPPED ((DWORD)0x8010001EL)
225 
226 #define SCARD_E_UNEXPECTED ((DWORD)0x8010001FL)
227 
228 #define SCARD_E_ICC_INSTALLATION ((DWORD)0x80100020L)
229 
230 #define SCARD_E_ICC_CREATEORDER ((DWORD)0x80100021L)
231 
232 #define SCARD_E_UNSUPPORTED_FEATURE ((DWORD)0x80100022L)
233 
234 #define SCARD_E_DIR_NOT_FOUND ((DWORD)0x80100023L)
235 
236 #define SCARD_E_FILE_NOT_FOUND ((DWORD)0x80100024L)
237 
238 #define SCARD_E_NO_DIR ((DWORD)0x80100025L)
239 
240 #define SCARD_E_NO_FILE ((DWORD)0x80100026L)
241 
242 #define SCARD_E_NO_ACCESS ((DWORD)0x80100027L)
243 
244 #define SCARD_E_WRITE_TOO_MANY ((DWORD)0x80100028L)
245 
246 #define SCARD_E_BAD_SEEK ((DWORD)0x80100029L)
247 
248 #define SCARD_E_INVALID_CHV ((DWORD)0x8010002AL)
249 
250 #define SCARD_E_UNKNOWN_RES_MNG ((DWORD)0x8010002BL)
251 
252 #define SCARD_E_NO_SUCH_CERTIFICATE ((DWORD)0x8010002CL)
253 
254 #define SCARD_E_CERTIFICATE_UNAVAILABLE ((DWORD)0x8010002DL)
255 
256 #define SCARD_E_NO_READERS_AVAILABLE ((DWORD)0x8010002EL)
257 
259 #define SCARD_E_COMM_DATA_LOST ((DWORD)0x8010002FL)
260 
261 #define SCARD_E_NO_KEY_CONTAINER ((DWORD)0x80100030L)
262 
263 #define SCARD_E_SERVER_TOO_BUSY ((DWORD)0x80100031L)
264 
265 #define SCARD_E_PIN_CACHE_EXPIRED ((DWORD)0x80100032L)
266 
267 #define SCARD_E_NO_PIN_CACHE ((DWORD)0x80100033L)
268 
269 #define SCARD_E_READ_ONLY_CARD ((DWORD)0x80100034L)
270 
272 #define SCARD_W_UNSUPPORTED_CARD ((DWORD)0x80100065L)
273 
274 #define SCARD_W_UNRESPONSIVE_CARD ((DWORD)0x80100066L)
275 
277 #define SCARD_W_UNPOWERED_CARD ((DWORD)0x80100067L)
278 
279 #define SCARD_W_RESET_CARD ((DWORD)0x80100068L)
280 
282 #define SCARD_W_REMOVED_CARD ((DWORD)0x80100069L)
283 
284 #define SCARD_W_SECURITY_VIOLATION ((DWORD)0x8010006AL)
285 
286 #define SCARD_W_WRONG_CHV ((DWORD)0x8010006BL)
287 
289 #define SCARD_W_CHV_BLOCKED ((DWORD)0x8010006CL)
290 
291 #define SCARD_W_EOF ((DWORD)0x8010006DL)
292 
293 #define SCARD_W_CANCELLED_BY_USER ((DWORD)0x8010006EL)
294 
295 #define SCARD_W_CARD_NOT_AUTHENTICATED ((DWORD)0x8010006FL)
296 
297 #define SCARD_W_CACHE_ITEM_NOT_FOUND ((DWORD)0x80100070L)
298 
299 #define SCARD_W_CACHE_ITEM_STALE ((DWORD)0x80100071L)
300 
302 #define SCARD_W_CACHE_ITEM_TOO_BIG ((DWORD)0x80100072L)
303 
308 #define SCARD_PROTOCOL_UNDEFINED 0x00000000
309 
310 #define SCARD_PROTOCOL_T0 0x00000001
311 
312 #define SCARD_PROTOCOL_T1 0x00000002
313 
314 #define SCARD_PROTOCOL_RAW 0x00010000
315 
316 #define SCARD_PROTOCOL_Tx (SCARD_PROTOCOL_T0 | SCARD_PROTOCOL_T1)
317 
318 #define SCARD_PROTOCOL_ANY SCARD_PROTOCOL_Tx
319 
321 extern uint8_t g_bgm_disable;
325 #define DISABLE_BACKGROUND_MANAGEMENT (&g_bgm_disable)
326 
327 #define SCARD_ATTR_VALUE(Class, Tag) ((((DWORD)(Class)) << 16) | ((DWORD)(Tag)))
328 
329 #define SCARD_CLASS_VENDOR_INFO 1 // Vendor information definitions
330 #define SCARD_CLASS_COMMUNICATIONS 2 // Communication definitions
331 #define SCARD_CLASS_PROTOCOL 3 // Protocol definitions
332 #define SCARD_CLASS_POWER_MGMT 4 // Power Management definitions
333 #define SCARD_CLASS_SECURITY 5 // Security Assurance definitions
334 #define SCARD_CLASS_MECHANICAL 6 // Mechanical characteristic definitions
335 #define SCARD_CLASS_VENDOR_DEFINED 7 // Vendor specific definitions
336 #define SCARD_CLASS_IFD_PROTOCOL 8 // Interface Device Protocol options
337 #define SCARD_CLASS_ICC_STATE 9 // ICC State specific definitions
338 #define SCARD_CLASS_PERF 0x7FFE // performace counters
339 #define SCARD_CLASS_SYSTEM 0x7FFF // System-specific definitions
340 
341 /* Attribute to set/get whether or not the library automatically handles
342  background execution.
343  Valid values are 0 to disable and 1 to enable the feature. The size of the
344  value buffer must be set to sizeof(BYTE). */
345 #define SCARD_ATTR_AUTO_BACKGROUND_HANDLING SCARD_ATTR_VALUE(SCARD_CLASS_VENDOR_DEFINED, 0xB100)
346 
347 /* Attribute to set/get whether an inserted card shall be automatically powered when inserted
348  in the reader.
349  Most desktop implementations of PCSC will automatically power on the smart when it is inserted
350  in the smart card reader. This implementation however will not automatically power on the card
351  with regards to battery life of the iOS device.
352  This means that the SCARD_READERSTATE structure used in SCardGetStatusChange will be populated
353  somewhat differently compared with a desktop implementation. For example, the ATR value in
354  rgbAtr/cbAtr will be blank prior to calls to SCardConnect.
355  It is possible to enabled automatic power on in order to mimic desktop PCSC behaviour using
356  the proprietary SCARD_ATTR_AUTO_POWER_ON attribute together with a call to SCardSetAttrib.
357  The default value is set to disabled. The set value is global and is valid until the last
358  SCARDCONTEXT is released with a call to SCardReleaseContext.
359  Valid values are 0 to disable and 1 to enable the feature. The size of the
360  value buffer must be set to sizeof(BYTE). */
361 #define SCARD_ATTR_AUTO_POWER_ON SCARD_ATTR_VALUE(SCARD_CLASS_VENDOR_DEFINED, 0xB101)
362 
363 
367 typedef LONG SCARDHANDLE;
370 
372 #define SCARD_HANDLE_INVALID 0
373 
374 #ifdef __APPLE__
375 #pragma pack(1)
376 #endif
377 
379 typedef struct
380 {
382  const char *szReader;
385  void *pvUserData;
398  unsigned char rgbAtr[33];
399 }
401 
403 typedef struct
404 {
409 }
411 
412 #ifdef __APPLE__
413 #pragma pack()
414 #endif
415 
418 
422 #define SCARD_PCI_T0 (&g_rgSCardT0Pci)
423 
424 #define SCARD_PCI_T1 (&g_rgSCardT1Pci)
425 
426 #define SCARD_PCI_RAW (&g_rgSCardRawPci)
427 
445  LPCVOID pvReserved1,
446  LPCVOID pvReserved2,
447  LPSCARDCONTEXT phContext);
448 
459 
480  LPCSTR szReader,
481  DWORD dwShareMode,
482  DWORD dwPreferredProtocols,
483  LPSCARDHANDLE phCard,
484  LPDWORD pdwActiveProtocol);
485 
506  DWORD dwShareMode,
507  DWORD dwPreferredProtocols,
508  DWORD dwInitialization,
509  LPDWORD pdwActiveProtocol);
510 
523  DWORD dwDisposition);
524 
554  LPSTR mszReaderName,
555  LPDWORD pcchReaderLen,
556  LPDWORD pdwState,
557  LPDWORD pdwProtocol,
558  LPBYTE pbAtr,
559  LPDWORD pcbAtrLen);
560 
584  DWORD dwTimeout,
585  LPSCARD_READERSTATE rgReaderStates,
586  DWORD cReaders);
613  const SCARD_IO_REQUEST *pioSendPci,
614  LPCBYTE pbSendBuffer,
615  DWORD cbSendLength,
616  SCARD_IO_REQUEST *pioRecvPci,
617  LPBYTE pbRecvBuffer,
618  LPDWORD pcbRecvLength);
619 
643  LPCSTR mszGroups,
644  LPSTR mszReaders,
645  LPDWORD pcchReaders);
646 
657  LPCVOID pvMem);
658 
668 LONG SCardCancel(SCARDCONTEXT hContext);
669 
678 
701  SCARDHANDLE hCard,
702  DWORD dwAttrId,
703  LPCBYTE pbAttr,
704  DWORD cbAttrLen);
705 
729  SCARDHANDLE hCard,
730  DWORD dwAttrId,
731  LPBYTE pbAttr,
732  LPDWORD pcbAttrLen);
733 
734 
735 #pragma mark Currently not implemented
736 
742  LPSTR mszGroups,
743  LPDWORD pcchGroups);
744 
750  DWORD dwControlCode,
751  LPCVOID pbSendBuffer,
752  DWORD cbSendLength,
753  LPVOID pbRecvBuffer,
754  DWORD cbRecvLength,
755  LPDWORD lpBytesReturned);
766  DWORD dwDisposition);
769 #endif /* _WINSCARD_H_ */
770